home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 051-075 / scopedisk58 / adjclock / adjclock.c < prev    next >
C/C++ Source or Header  |  1995-03-19  |  1KB  |  77 lines

  1. #include <stdio.h>
  2.  
  3. main()
  4.     {
  5.     int count[7];
  6.     char oldval,saveval;
  7.     long ticks[6];
  8.     int i;
  9.     long scount;
  10.     char *clock = (char *)0xdc0001;
  11.     long SetSignal();
  12.     union {
  13.         char b[4];
  14.         long l;
  15.         } t;
  16.     long counter=-1,diff;
  17.  
  18.     t.b[0] = 0;
  19.  
  20.     printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  21.  
  22.     for (i=0; i<6; ++i)
  23.         {
  24.         count[i] = 0;
  25.         ticks[i] = 0;
  26.         }
  27.  
  28.     /* wait for the seconds to change */
  29.     for (scount = 1000000l,oldval = clock[0];
  30.         oldval == clock[0] && --scount;);
  31.     if (!scount)
  32.         {
  33.         printf("No clock\n");
  34.         return 0;
  35.         }
  36.     oldval &= 15;
  37.  
  38.     SetSignal(0l,0x7000l);
  39.     while ((0x7000L & SetSignal(0l,0l)) == 0)
  40.         {
  41.         /* wait for 2 readings with the same value, before I did this I */
  42.         /* occasionally got some strange results                        */
  43.  
  44.         do saveval = clock[0] & 15;
  45.             while (saveval == 15 || saveval != (15 & clock[0]));
  46.  
  47.         if (saveval == oldval) continue;
  48.  
  49.         oldval = saveval;
  50.         t.b[1] = *(unsigned char *)0xbfea01;
  51.         t.b[2] = *(unsigned char *)0xbfe901;
  52.         t.b[3] = *(unsigned char *)0xbfe801;
  53.         scount = t.l;
  54.         diff = (65536l + scount - counter) & 0xffffl;
  55.         if (counter == -1)
  56.             {
  57.             counter = scount;
  58.             continue;
  59.             }
  60.         /* force the first counter to print every second */
  61.         count[0] = 10;
  62.         counter = scount;
  63.         for (i=0; i<6; ++i)
  64.             {
  65.             ticks[i] += diff;
  66.             if (count[i] == 10)
  67.                 {
  68.                 printf("\x9b%d;%d\x48%6d      ",
  69.                     15-i,count[i+1]++ * 6+1,ticks[i]);
  70.                 count[i] = 0;
  71.                 ticks[i] = 0;
  72.                 }
  73.             }
  74.         }
  75.     return 0;
  76.     }
  77.